package com.zh.work.controller.platform.merch.mongo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.BulkOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.List;


/**
 * code is far away from bug with the animal protecting
 * ┏┓　　　┏┓
 * ┏┛┻━━━┛┻┓
 * ┃　　　　　　　┃
 * ┃　　　━　　　┃
 * ┃　┳┛　┗┳　┃
 * ┃　　　　　　　┃
 * ┃　　　┻　　　┃
 * ┃　　　　　　　┃
 * ┗━┓　　　┏━┛
 * 　　┃　　　┃神兽保佑
 * 　　┃　　　┃代码无BUG！
 * 　　┃　　　┗━━━┓
 * 　　┃　　　　　　　┣┓
 * 　　┃　　　　　　　┏┛
 * 　　┗┓┓┏━┳┓┏┛
 * 　　　┃┫┫　┃┫┫
 * 　　　┗┻┛　┗┻┛
 *
 * @Description: 自定义mongoDB操作
 * @Author: Liard
 * @Create in: 2020/6/12 10:54
 * @Version: 1.0.1
 */
@Component
public class MongoBaseResponseImpl implements MongoBaseResponse {
    private static final Logger log = LoggerFactory.getLogger(MongoBaseResponseImpl.class);

    @Autowired
    private MongoTemplate template;

    @Override
    public void save(HashMap<String, String> map,String tabName) {
        template.save(map,tabName);
    }

    @Override
    public void batchSave(List<HashMap<String, String>> list, String tabName) {
        // BulkMode.UNORDERED:表示并行处理，遇到错误时能继续执行不影响其他操作；BulkMode.ORDERED：表示顺序执行，遇到错误时会停止所有执行
        BulkOperations ops = template.bulkOps(BulkOperations.BulkMode.UNORDERED, tabName);
        list.forEach( l -> template.insert(l));
        ops.execute();
    }

    @Override
    public HashMap<String, String> getByMrcName(String mrcName) {
        // is: 精准匹配 regex:模糊匹配
        Query query = new Query(Criteria.where("fullName").regex(".*?\\" +  mrcName + ".*"));
        HashMap map = template.findOne(query , HashMap.class);
        return map;
    }

    @Override
    public HashMap<String, String> getByMrcPlateNo(String plateNo) {
        Query query = new Query(Criteria.where("PLATE_FORM_NO").regex(".*?\\" +  plateNo + ".*"));
        HashMap map = template.findOne(query , HashMap.class);
        return map;
    }

    @Override
    public HashMap<String, String> getOneMrc(HashMap<String, String> map) {
        Query query = new Query();
        for (HashMap.Entry m : map.entrySet()) {
            if (m.getKey().equals("MERC_NM")) {
            }
        }
        return null;
    }

    @Override
    public List<HashMap<String, String>> getListMrc(HashMap<String, String> map) {
        return null;
    }


    @Override
    public void delMrc(String plateNo) {
        Query query=new Query(Criteria.where("PLATE_FORM_NP").is(plateNo));
        template.remove(query, HashMap.class);
    }
}
